/**
 * Project Name:template-web
 * File Name   :AbstractSqlMapImpl.java
 * Package Name:org.cn.template.component.repository.impl
 * Date:2015年9月27日下午3:44:20
 * Copyright (c) 2015, http://my.oschina.net/httpssl All Rights Reserved.
 *
*/

package org.cn.template.component.repository.impl;

import org.cn.template.component.domain.PersistentModel;
import org.cn.template.component.repository.IBaseDao;
import org.cn.template.component.repository.ParamTools;


/**
 * ClassName:AbstractSqlMapImpl <br/>
 * Function :TODO ADD FUNCTION. <br/>
 * Reason	:TODO ADD REASON. <br/>
 * Date     :2015年9月27日 下午3:44:20 <br/>
 * @author  :http://my.oschina.net/httpssl
 * @email   :491835898@QQ.COM
 * @since   :JDK 1.7
 * @see 	 
 */
public abstract class AbstractSqlMapImpl<T extends PersistentModel> implements IBaseDao<T>
{
	public static final char SQLNAME_SEPARATOR = '.';

	/**
	 * @fields sqlNamespace SqlMapping命名空间
	 */
	private String sqlNamespace = getDefaultSqlNamespace();

	protected String getDefaultSqlNamespace()
	{
		Class<?> genericClass = ParamTools.getGenericClass(this.getClass());
		return genericClass == null ? null : genericClass.getName();
	}

	/**
	 * 
	 * @Description:SqlMapping命名空间
	 * @return String
	 * @throws
	 */
	public String getSqlNamespace()
	{
		return sqlNamespace;
	}
	/**
	 * @Description: 设置SqlMapping命名空间。 以改变默认的SqlMapping命名空间，
	 *               不能滥用此方法随意改变SqlMapping命名空间。
	 * @return void
	 * @throws
	 */
	public void setSqlNamespace(String sqlNamespace)
	{
		this.sqlNamespace = sqlNamespace;
	}
	
	/**
	 * 将SqlMapping命名空间与给定的SqlMapping名组合在一起。
	 * 
	 * @param sqlName
	 *            SqlMapping名
	 * @return 组合了SqlMapping命名空间后的完整SqlMapping名
	 */
	protected String getSqlName(String sqlName)
	{
		return sqlNamespace + SQLNAME_SEPARATOR + sqlName;
	}
	
	protected String generateId()
	{
		return ParamTools.UUID_Generator.create();
	}
}
